#pragma once
#include <stdint.h> // 确保 int32_t 和 uint16_t 可用
#include <pthread.h>

typedef struct
{
    pthread_t tid;
    int32_t fd;
    int32_t epfd;
    int32_t clientInfoFd;
} fdInfo;

// 初始化监听的套接字
int32_t initListenFd(uint16_t port);
// 启动epoll
int32_t epollRun(int32_t lfd);
// 和客户端建立连接
void *acceptClient(void *arg);
// 接收客户端http请求
void *recvHttpRequest(void *arg);
// 解析请求行
int32_t parseRequestLine(const char *line, int cfd);
// 发送响应头（状态行+响应头）
int32_t sendHeadMsg(int cfd, int status, const char *descr, const char *type, int32_t length);
// 发送文件
int32_t sendFile(const char *fileName, int32_t cfd);
// 查找对应的Content-type
const char *getFileType(const char *fileName);
// 发送目录信息
int32_t sendDir(const char *dirName, int32_t cfd);
// 解码
// to 存储解码之后的数据, 传出参数, from被解码的数据, 传入参数
void decodeMsg(char *to, char *from);
